#include <memory>

using namespace std;

size_t get_size();

int main()
{
    size_t n = get_size();          // get_size 返回需要的元素的数目
    int *p = new int[n];            // 分配数组保存元素
    // n = 0 时，new 返回一个合法的非空指针，但此指针不能解引用
    // 循环体不会被执行
    for (int *q = p; q != p + n; ++q)
        /* 处理数组 */

    // char arr[0];            // 错误：不能定义长度为 0 的数组
    char *cp = new char[0]; // 正确：但 cp 不能解引用
}

size_t get_size()
{
    /* ... */
    return 0;
}